'''
定义一个列表，存储分数
分数分别有5位评委进行输入，去掉最高分，去掉最低分，求这位选手的平均值
'''
'''
scores=[]#定义一个空列表
for i in range(1,6):#循环将评委的分数写入
    score=eval(input(f'请输入第{i}位评委的分数：'))
    #将获取的分数append到列表中
    scores.append(score)
#每次循环就对score进行赋值，然后我们将这个值追加到之前创建的空列表里面

print("所有评委的分数为",scores)

#去掉最高分
scores.remove(max(scores))

#去掉最低分
scores.remove(min(scores))


avg=sum(scores)/len(scores)

print(f"选手的平均分是：{avg:.2f}")

#添加的方法有3种
'''
'''
append--追加
insert---在指定位置插入元素
extend--添加序列
'''
'''
去掉最高分，去掉最低分
方法一：先排序，删除第一元素和最后一个元素
方法二：max()获取最高分，min()获取最低分

我们上面使用的就是方法二

那我们下面使用方法一进行操作下
'''
'''
scores.sort()#排序
print(li)
li.pop(0)#删除第一个
li.pop(-1)#删除最后一个
print(li)
#我们现在已经去掉最低分和最高分了

#pop是删除索引对应的位置
#而remove是删除列表中值为这个数的数字


#平均值=总和/数量
'''
'''
1.求总和
    1.通过循环遍历列表中的数据
    2.通过sum这个函数进行求和的操作
    '''
'''
sum_b=0
for i in scores:
    sum_b+=i

print(sum_b)
#那么我们现在就拿到了总和了

#后面就能进行平均值的求了
#我们通过len函数获取序列元素的个数
'''

'''
s="pyhton"
#索引---序列[索引]
print(s[-1])
#n

#切片---序列[开始索引：结束索引：步长]   不包含步长的
print(s[::2])
#pho


#很明显是会报错的
#那么就说明字符串是不能进行修改的，和元组一样的


#replace(旧字符，新字符，替换次数)
s.replace("p","P")
print(s)
#我们打印这个字符串发现并没有任何的修改

#因为这个修改的话是不对原字符串进行任何操作的
#仅仅是返回一个新的字符串，这个字符串就是被修改了的
b=s.replace("p","P")

print(b)
#Pyhton
#那么现在就是修改成功了
#对s进行重新赋值的操作
s=b
print(s)
#那么现在s里面的内容就被修改了


s1="hahaha".replace("a","i")
print(s1)
#hihihi
#我们这里发现所有的a都被改成i了

#如果我们没有设置替换次数的话，编译器会默认修改所有要替换的字符

s2="hahaha".replace("a","i",1)
print(s2)
#hihaha
#我么还能规定了替换次数之后，那么编译器就仅仅只替换了第一个

'''
"""
#title()
#upper()
#lower()

print("hi, my name is xiaoming".title())
#Hi, My Name Is Xiaoming
#title的使用方法：  字符串.title()
#将字符串中每个单词的首字母进行大写的操作


print("Hi,name,123".upper())
#HI,NAME,123



print("HI,NAME,123".lower())
#hi,name,123


print("Hi,name,123".isupper())
#False
#因为这个字符串里面存在小写的字母，那么就说明这个字符串并没有进行大写的操作


print("HI,NAME,123".islower())
#False

print("HI,NAME,123".isdigit())
#False

print("HI,NAME".isalpha())
#False

print("HINAME".isalpha())
#True


print("hi,name,123".capitalize())
#Hi,name,123

"""
"""
#strip(字符)---在字符串的左右两边删除指定字符，默认是空白字符

s=" hahaha"#这个字符串的开头有一个空格
print(s)
s1=s.strip()
print(s1)
#默认将左右两边的空格进行删除
'''
 hahaha
hahaha

'''
s1=s.strip("a")
print(s1)
'''
 hahah
我们这里没有删除空格，我们将左右两边的a进行删除了

我们的操作都是左右两边，不会对字符中间进行处理的
'''
"""

#split(字符，拆分次数)---按照指定字符对字符串进行拆分，默认是空白字符

#print("my name is xiaoming".split())
'''
['my', 'name', 'is', 'xiaoming']
'''
#我们的这个函数是什么参数都没进行添加的
#那么默认就是按照空格进行拆分

#我们这里的句子是有三个空格的，那么通过这个拆分函数进行拆分之后
#那么就拆分成了四个元素组成的列表

#print("my name is xiaoming".split(" ",2))
'''
['my', 'name', 'is xiaoming']
我们在这里设置了分隔符为空格，拆分的次数为2
然后最后面的那个空格就没有进行拆分了
我们拆了两次拿到了3个元素
'''
"""
s="www.baidu.com"
#以点进行拆分，并且加以拆分次数
print(s.split(".",2))
'''
['www', 'baidu', 'com']
'''
s1="www.baidu.cn.com"
print(s1.split("."))#不加拆分次数，默认全部拆
'''
['www', 'baidu', 'cn', 'com']
'''

#使用join进行拼接，使用我们指定的符号进行拆分后元素的拼接
print('*'.join(s1.split(".")))

'''
www*baidu*cn*com
'''
#使用方法就是："指定的符号".join(拆分好的列表)

"""
"""
#find(字符，开始索引，结束索引)---在指定的范围中查找字符，
#默认的话是在整个字符串中进行查找
#个人感觉像列表的切片操作

#我们这里打印的是返回值
print("python".find("p"))
#0
print("python".find("P"))
#-1

#如果找到了的话就返回0，没有找到的话就返回-1
#我们这里没找到的话是不会进行报错的


#index没有找到对应的数据的时候是会进行报错的
print("python".index("p"))
#0
#print("python".index("P"))
#报错
"""
#字符串转列表，修改元素之后再变回字符串的操作
s="hahahaha"
li=list(s)
print(li)
'''
['h', 'a', 'h', 'a', 'h', 'a', 'h', 'a']
字符串转列表的话会将每个字符转换为一个元素
'''

li[3]="p"
print(li)
'''
['h', 'a', 'h', 'p', 'h', 'a', 'h', 'a']
我们直接利用索引就能进行对应数据的修改了
'''
##s=str(li)
##print(s)
'''
交互模式下
s
"['h', 'a', 'h', 'p', 'h', 'a', 'h', 'a']"
说明我们已经转换成功了
'''

'''
我们利用类型的转换，将字符串先转换为列表，
然后之前字符串的每个字符就变成了列表的元素了
然后我们利用列表的索引值对元素进行修改的操作
修改完之后我们将这个列表转换为字符串
发现仅仅只是在这个列表外面加了一层引号，并没有做出什么实质性的改变
那么我们应该怎么做才能将修改后的列表变为原先那样的字符串呢？
'''
'''
这里我们提到了join函数这个概念
"连接符".join(序列)
作用就是将序列的元素用连接符连接成一个字符串
'''
"""
s="".join(li)#因为原先的字符串内的字符之间是没有符号的，我们这里使用空字符
print(s)
'''
hahphaha
'''
#通过这种方法我们在改变数据之后我们就不需要再进行类型的转换的操作了

#我们直接将列表中的单个元素拼接在一起形成一个字符串

#我们也是可以用其他的符号进行连接的


print("abcd\tefg")
'''
abcd	efg
中间的空格就是一个Tab的大小
'''
print("w\t*")
print("ww\t*")
print("www\t*")
print("wwww\t*")
print("wwwww\t*")


'''
w	*
ww	*
www	*
wwww	*
wwwww	*
\t会自动帮我们进行对齐，进行排版
'''
"""

'''
print("\\test")
#\test


\' ----  '
\"----  "
在下面这种单引号包裹着双引号，双引号包裹着单引号的情况下，我们可以使用这种方式
进行隔离，保证不会因为引号匹配错误导致报错
'''
'''
print('my name is \'xiaoming\'')
#my name is 'xiaoming'

print('my \'name\' is \'xiaoming\'')
my 'name' is 'xiaoming'

'''
"""
print("C:\\Temp\\BT_DFU_FW\\10\\DFU_SOP.pdf")

#我们这里的\本来表示的就是一个单纯的\
#但是可能会和后面的字母组合成为转义字符
#为了避免这种可能，我们在字符串引号前面加上一个字符r
#那么就会将这个字符串的转义给去掉

#还有一种方法就是上面的在原本的\前面再加上一个\
#\\   两个右斜杠转义过来就是一个\   那么就不会存在\与后面的字母进行配对成转义字符的情况了
"""





"""
d={'name':'凯子','age':19,'sex':'男'}
print(d)
#{'name': '凯子', 'age': 19, 'sex': '男'}
print(type(d))
#<class 'dict'>


#上面已经将字典定义好了，但是我们现在怎么进行拿值的操作呢？

#获取值---字典[键]：
#序列类型是有顺序的，散列类型是没有顺序的
#字典也是没有顺序的，如果想访问值的话，我们是需要通过键进行获取的
print(d['name'])
#凯子

#我们将顺序进行改变的话我们仍然能进行访问
"""
'''
#键必须是唯一的
d={'name': '凯子', 'age': 19, 'sex': '男',"name":"小明"}
print(d)
#{'name': '小明', 'age': 19, 'sex': '男'}
#之前定义的凯子就被这个小明给替换掉了

#如果在字典里面出现重复的键，那么前面的键值对会被后面的键值对给替换掉
'''
'''
因为我们之前就说明了
在字典中对数值的访问我们只能通过键
那么现在有两个一样的键，那么我们是不知道访问谁的
所以在字典中键必须是唯一的

如果同时出现一样的键，那么前面的键值对会被后面键值对提坏

如果确实要定义两个名字的话，我们可以在name后面加上数字进行区分
'''
'''
d={'name':'凯子','age':19,'sex':'男'}
d['name']="小红"
print(d)
#{'name': '小红', 'age': 19, 'sex': '男'}

d['name3']='小兰'
print(d)
#{'name': '小红', 'age': 19, 'sex': '男', 'name3': '小兰'}

print(d.get('name'))
#小红
print(d.get('age'))
#19
 
print(d.get('age1'))
#None
'''
'''
这种方式就会进行一个提示，如果我们输入的键是不存在的话
那么就会提示我们None，说明字典里面并没有这个键
'''

'''
#除此之外，我们是可以自己设置这个提示，提醒我们这个键不存在
print(d.get('age1','键不存在'))
#键不存在
'''

d={'name':'凯子','age':19,'sex':'男'}
print(d.setdefault('name5','kk'))
print(d)

#{'name': '凯子', 'age': 19, 'sex': '男', 'name5': 'kk'}
#这里的name5就是不存在的键
#通过这种方法我们直接将这个键放到字典中

print(d.setdefault('name5','55'))
print(d)
#{'name': '凯子', 'age': 19, 'sex': '男', 'name5': 'kk'}
#如果我们输入的键是存在的话，那么我们就不进行额外的操作了



























